﻿
using mvLibrary;
using mvLibrary.Helpers.Utils;
using BlueFinity.mvNET.CoreObjects;
using System;
using mvLibrary.Helpers.BaseClass;
using IBMU2.UODOTNET;

namespace fenk.Stock.Reservas
{
    public partial class AltaReservas : BaseForm
    {
        private const string PRODUCTO_FILENAME = "PRODUCTOS";
        private const int PRODUCTOS_INDEX = 6;
        private const int CANTIDAD_INDEX = 7;
        private const int STOCK_RESERVADO_INDEX = 40;
        private const int CANCELADO_INDEX = 9;
        private bool previousCancelState;

        public AltaReservas()
        {
            InitializeComponent();
        }

        public override void AfterReadItem()
        {
            gpbBajaReserva.Visible = ItemStatus.Equals(Status.Update);
            previousCancelState = FenkUtils.GetBoolFromYesNoString(UniItem.ExtractAsString(CANCELADO_INDEX));
            this.panelData.Enabled = !previousCancelState;
        }

        public override void AfterSaveItem()
        {
            bool isCancelOperation = !previousCancelState.Equals(chkCancelarReserva.Checked);
            var idProductos = UniItem.Extract(PRODUCTOS_INDEX);

            int position = 1;
            for (int index = 0; index < idProductos.Dcount(); index++)
            {
                var idProducto = idProductos.ExtractAsString(index + 1, position);

                int cantidadProductoAnterior =
                    UniOldItem.ExtractAsInt(CANTIDAD_INDEX, position);


                int cantidadProductoActual = !isCancelOperation ?
                    UniItem.ExtractAsInt(CANTIDAD_INDEX, position) : FenkUtils.ZERO;
                UniDynArray producto = programCaller.ReadRecord(UniAccount, idProducto, PRODUCTO_FILENAME);

                int stockReservado = producto.ExtractAsInt(STOCK_RESERVADO_INDEX);
                int stockFinal = stockReservado - cantidadProductoAnterior + cantidadProductoActual;

                producto.Replace(STOCK_RESERVADO_INDEX, stockFinal.ToString());

                string productoString = producto.ToString();

                programCaller.SaveItem(UniAccount, productoString, idProducto, PRODUCTO_FILENAME, User);
                position++;
            }
        }
    }
}
